package com.education.platform.api.service.common;

import com.education.platform.api.service.entity.LoginSuccessDTO;
import com.education.platform.api.service.entity.PointsRankDTO;
import com.education.platform.api.vo.request.ChallengeResultVO;
import com.education.platform.api.vo.response.CollectOrLikeListResponseVO;
import com.education.platform.common.service.entity.PageDTO;
import com.education.platform.dao.entity.CourseDO;

import java.util.List;
import java.util.Map;

/**
 * describe: 缓存服务
 *
 * @author : tomato
 * @date: 2020-06-06 02:55:52.341
 **/
public interface CacheDataService {


    /**
     * 初始化用户计数器
     */
    void initRedisCount(Integer userId);

    /**
     * 初始化今日学习时间
     */
    void initRedisTodayCount();

    /**
     * 获取用户所有缓存统计
     *
     * @param dto
     */
    void getUserRedisCount(LoginSuccessDTO dto);
    /**
     * 收藏操作
     * @param topicId
     * @param status
     */
    void collectOperate(Integer topicId, Boolean status,int topicType );

    /**
     * 点赞操作
     * @param topicId
     * @param status
     */
    void likeOperate(Integer topicId, Boolean status,int topicType );


    /**
     * 获取用户收藏/点赞 列表
     *
     * @param type
     * @return
     */
    PageDTO<CollectOrLikeListResponseVO> getUserCollectionOrLikeList(int type, int topicType, int pageNo, int pageSize);

    /**
     * 用户积分操纵   增加/减少
     *
     * @param score
     */
    float userPointsOperate(float score,Integer type);

    /**
     * 挑战答题
     * @param numbers
     * @return
     */
    ChallengeResultVO userChallenge(Integer numbers);



    /**
     * 获取收藏状态
     *
     * @param
     * @return
     */
    String getCollectionStatus(Integer topicId,int topicType);

    /**
     * 获取点赞状态
     *
     * @param
     * @return
     */
    String getLikeStatus(Integer topicId,int topicType);

    /**
     * 课程收藏数
     * @param courseId
     * @return
     */
    Integer getCourseCollectCount(Integer courseId);

    /**
     * 课程点赞数
     * @param courseId
     * @return
     */
    Integer getCourseLikeCount(Integer courseId);

    /**
     * 剩余挑战次数
     * @return
     */
    Integer getChallengeTime();

    /**
     * 保存搜索词
     * @param word
     */
    void saveQueryKeyWord(String word);

    /**
     * 获取热搜词
     * @param num
     * @return
     */
    List<String> getQueryKeyWordList(Integer num);
}
